/**
 * README
 * 
 * Modificacion de la biblioteca jWave disponible en http://code.google.com/p/jwave/
 * Convertidos los tipos de datos a float para agilizar el tratamiendo de grandes arrays de datos
 * como son los que se tratan en analisis genomicos.
 * Los autores originales de las funciones y del código de la biblioteca cuando fue seleccionada en
 * Abril de 2012 eran:
 *        Christian Scheiblich
 *        Thomas Leduc
 *        sashi
 *        Pol Kennel
 *        Thomas Haider
 *        
 * Por supuesto, todo el merito, honores y demas menciones sobre esta adaptacion les corresponden a ellos
 * y nada mas que a ellos.
 * 
 * 
 * This is a modified version of jWave, available in http://code.google.com/p/jwave/
 * It has been replace the double datatype with float for performance reasons in very big arrays used in
 * bioinformatics like genomic analysis.
 * Original authors of functions and the library when it has been selected in 2012's April were:
 *        Christian Scheiblich
 *        Thomas Leduc
 *        sashi
 *        Pol Kennel
 *        Thomas Haider
 *        
 * Of course, all the merits and mentions about this adaptation have corresponded to them.
 * 
 */

package ev.maths.handlers.wavelets;

/**
 * Wavelet ortonormal de Ingrid Daubechies con 4 coeficientes y escalas normalizado a
 * raíz de 2, normal euclídea.
 * 
 * @date 01.08.2012
 * @author Enrique Vázquez de Luis
 */
public class Daub02 extends Wavelet {

  /**
   * Constructor que inicializa los coeficientes y las escalas.
   * 
   * @date 01.08.2012
   * @author Enrique Vázquez de Luis
   */
  public Daub02( ) {

    _waveLength = 4;

    _scales = new float[ _waveLength ]; 

    float sqrt3 = (float)Math.sqrt( 3. ); // 1.7320508075688772
    float sqrt2 = (float)Math.sqrt( 2. );//1.4142135623730951
    
    _scales[ 0 ] = (float) (( ( 1. + sqrt3 ) / 4. ) / sqrt2);
    _scales[ 1 ] = (float) (( ( 3. + sqrt3 ) / 4. ) / sqrt2);
    _scales[ 2 ] = (float) (( ( 3. - sqrt3 ) / 4. ) / sqrt2);
    _scales[ 3 ] = (float) (( ( 1. - sqrt3 ) / 4. ) / sqrt2);

    _coeffs = new float[ _waveLength ]; 

    _coeffs[ 0 ] = _scales[ 3 ]; //    h3
    _coeffs[ 1 ] = -_scales[ 2 ]; //  -h2
    _coeffs[ 2 ] = _scales[ 1 ]; //    h1
    _coeffs[ 3 ] = -_scales[ 0 ]; //  -h0

  } // Daub02

} // class
